Data Source

Source: FEMA, NFIP Redacted Claims, last updated July 2020

cvilleAmountPaidByTract <- read_csv("../data/fema_nfip_cville_tract.csv")
meta <- read_sheet("https://docs.google.com/spreadsheets/d/1nqm3DuVXD1ObbVe_deacvT7uSLdBXfQJo3mkbqDwrVo/edit#gid=5733069", sheet = 'fema_nfip')

The Data Used Here

Congress created the National Flood Insurance Program (NFIP) in 1968 in order to provide insurance protection and reduce future flood losses through flood hazard identification. FEMA offers NFIP insurance coverage for building structures as well as for contents and personal property within the building structures to eligible and insurable properties. The original data set is updated approximately monthly and represents more than 2,000,000 claims transactions. We have filtered these claims to include only those in the Charlottesville region filed from 2010 upwards. This filtered data summarizes the number of flood claims per tract as well as the total coverage amounts and claim amounts in dollars for each tract in this region. It is meant to provide information in understanding the degree of damage experienced in a place.

Exploration

glimpse(cvilleAmountPaidByTract)
## Rows: 19
## Columns: 8
## $ censusTract                  <dbl> 51003010100, 51003010201, 51003010402, 51…
## $ n                            <dbl> 1, 1, 2, 2, 8, 4, 1, 1, 7, 9, 1, 1, 3, 1,…
## $ sumAmountPaidOnBuildingClaim <dbl> 5990.52, 4216.12, 0.00, 18406.49, 140550.…
## $ sumAmountPaidOnContentsClaim <dbl> 0.00, 0.00, 0.00, 0.00, 8158.53, 3029.18,…
## $ sumBuildingInsuranceCoverage <dbl> 250000, 250000, 500000, 450000, 1355000, …
## $ sumContentsInsuranceCoverage <dbl> 100000, 100000, 200000, 180000, 342000, 1…
## $ totalInsuranceCoverage       <dbl> 350000, 350000, 700000, 630000, 1697000, …
## $ totalAmountPaid              <dbl> 5990.52, 4216.12, 0.00, 18406.49, 148709.…
Number of Claims
# claims per tract
cvilleAmountPaidByTract[c('censusTract', 'n')] 
## # A tibble: 19 x 2
##    censusTract     n
##          <dbl> <dbl>
##  1 51003010100     1
##  2 51003010201     1
##  3 51003010402     2
##  4 51003010500     2
##  5 51003011000     8
##  6 51003011202     4
##  7 51003011400     1
##  8 51065020102     1
##  9 51079030101     7
## 10 51079030102     9
## 11 51109950100     1
## 12 51109950400     1
## 13 51125950200     3
## 14 51125950300     1
## 15 51540000201     1
## 16 51540000302     1
## 17 51540000402     2
## 18 51540000502     7
## 19 51540000700     2
# total observations
sum(cvilleAmountPaidByTract["n"])
## [1] 55
Variable Descriptions:
meta %>%
  select(c(varname, about)) %>% 
  as.list()
## $varname
## [1] "censusTract"                  "n"                           
## [3] "sumAmountPaidOnBuildingClaim" "sumAmountPaidOnContentsClaim"
## [5] "sumBuildingInsuranceCoverage" "sumContentsInsuranceCoverage"
## [7] "totalInsuranceAmount"         "totalAmountPaid"             
## 
## $about
## [1] "11-digit code defining census tract"                                       
## [2] "number of observations in each tract"                                      
## [3] "sum of $ amount paid on the building claims in each tract"                 
## [4] "sum of $ amount paid on the contents claims in each tract"                 
## [5] "sum of the total insurance amount in $ on the buildings (by tract)"        
## [6] "sum of the total insurance amount in $ on the contents (by tract)"         
## [7] "sum of the building and contents insurance coverage by tract"              
## [8] "sum of the total amount paid on both building and contents claims by tract"

Visual distributions

# barplot of the total $ amount paid by census tract
ggplot(cvilleAmountPaidByTract) + 
  geom_col(aes(x=as.factor(censusTract), y=totalAmountPaid),
           fill="darkmagenta", color="darkblue") +
  coord_flip() +
  labs(x="Census Tract",
       y="Amount Paid in Dollars ($)",
       title="Total Building & Contents Claim Amount Paid by Census Tract")

# barplot of the total insurance coverage amount by census tract
ggplot(cvilleAmountPaidByTract) + 
  geom_col(aes(x=as.factor(censusTract), y=totalInsuranceCoverage),
           fill="darkmagenta", color="darkblue") +
  coord_flip() +
  labs(x="Census Tract",
       y="Insurance Coverage (in $)",
       title="Insurance Coverage Amount by Census Tract")

Maps

Number of Claims per Census Tract

Displays the number of claims in each tract between the years 2010 to the present day. Tracts with more claims are darker on the map.

pal <- colorNumeric("plasma", reverse = TRUE, domain = cville_amount$n) # viridis

leaflet() %>% 
  addProviderTiles("CartoDB.Positron") %>% 
  addPolygons(data = cville_amount,
              fillColor = ~pal(n),
              weight = 1,
              opacity = 1,
              color = "white", 
              fillOpacity = 0.6,
              highlight = highlightOptions(
                weight = 2,
                fillOpacity = 0.8,
                bringToFront = T
              ),
              popup = paste0("Tract Number: ", cville_amount$NAME, "<br>",
                             "Number: ", round(cville_amount$n, 2))
  ) %>% 
  addLegend("bottomright", pal = pal, values = cville_amount$n, 
            title = "Number of Insurance Claims", opacity = 0.7)

Total Insurance Amount Map

Displays the total insurance coverage amount for each tract between the years 2010 to the present day. Tracts with higher coverage amounts are darker on the map.

pal <- colorNumeric("plasma", reverse = TRUE, domain = cville_amount$totalInsuranceCoverage) # viridis

leaflet() %>% 
  addProviderTiles("CartoDB.Positron") %>% 
  addPolygons(data = cville_amount,
              fillColor = ~pal(totalInsuranceCoverage),
              weight = 1,
              opacity = 1,
              color = "white", 
              fillOpacity = 0.6,
              highlight = highlightOptions(
                weight = 2,
                fillOpacity = 0.8,
                bringToFront = T
              ),
              popup = paste0("Tract Number: ", cville_amount$NAME, "<br>",
                             "Amount Paid in Dollars ($): ", round(cville_amount$totalInsuranceCoverage, 2))
  ) %>% 
  addLegend("bottomright", pal = pal, values = cville_amount$totalInsuranceCoverage, 
            title = "Insurace Coverage Amount", opacity = 0.7)

Total Claim Amount Map

Displays the total amount given in claims for each tract between the years 2010 to the present day. Tracts with higher claim payments are darker on the map.

pal <- colorNumeric("plasma", reverse = TRUE, domain = cville_amount$totalAmountPaid) # viridis

leaflet() %>% 
  addProviderTiles("CartoDB.Positron") %>% 
  addPolygons(data = cville_amount,
              fillColor = ~pal(totalAmountPaid),
              weight = 1,
              opacity = 1,
              color = "white", 
              fillOpacity = 0.6,
              highlight = highlightOptions(
                weight = 2,
                fillOpacity = 0.8,
                bringToFront = T
              ),
              popup = paste0("Tract Number: ", cville_amount$NAME, "<br>",
                             "Amount Paid in Dollars ($): ", round(cville_amount$totalAmountPaid, 2))
  ) %>% 
  addLegend("bottomright", pal = pal, values = cville_amount$totalAmountPaid, 
            title = "Claim Amount Paid", opacity = 0.7)

Additional Resources

This is a list of all of FEMA’s open data sets and could be helpful

claim manual that gives a little more details on how claims are filed (might not be that helpful though)

Other potential variables of interest (from original dataset): - elevatedBuildingIndicator: Yes (Y) or No (N) indicator of whether or not a building meets the NFIP definition of an elevated building (if it does not meet this criteria –> higher chance for flood damage) - floodZone: derived from the Flood Insurance Rate Map (FIRM) used to rate the insured property (ie. how susceptible to flood damage they are)